package main

import (
	"fmt"
	"reflect"
)

// 利用函数的参数定义为空接口
func testRefect(i interface{}) {
	// 调用TypeOf函数,返回reflect.Type类型的数据
	reType := reflect.TypeOf(i)
	fmt.Println(reType) // int
	// 调用ValueOf函数,返回reflect.Value类型数据
	reValue := reflect.ValueOf(i)
	fmt.Println(reValue) // 100
	// 虽然看着打印的是100这个数值,但它是value类型
	//num := 100 + reValue	// 这样编译就会直接报错了
	// 如果想要获取reValue的数值,用它的Int()方法
	num := 100 + reValue.Int()
	fmt.Println(num) // 200

	// reValue转成空接口
	a := reValue.Interface()
	// 类型断言
	i2 := a.(int)
	i3 := i2 + 30
	fmt.Println(i3) // 130
}
func main() {
	// 对基本数据类型进行反射
	var num int = 100
	testRefect(num)
}
